import {
  AppCompParams,
  AppDto,
  AppItem,
  AppTenantDto,
  CceInfo,
  ComponentItem,
  CompParams,
  DeployInfoQueryParams,
  ImageItem,
  InstanceItem,
  TenantItem,
} from './model/upgradeFormModel';
import { upgradeHttp } from '/@/utils/http/axios';

enum Api {
  APP_FOR_TENANTS = '/v1/upgrade/form/apps',
  ALL_TENANT_LIST = '/v1/upgrade/form/allTenants',
  TENANT_LIST_BY_APP = '/v1/upgrade/form/tenants',
  INSTANCE_LIST_BY_APP_TENANT = '/v1/upgrade/form/instances',
  COMPONENT_LIST_BY_APP = '/v1/upgrade/form/components',
  IMAGE_LIST_BY_COMPONENT = '/v1/upgrade/form/images',
  IMAGE_BY_COMP_ID_VERSION = '/v1/upgrade/form/certainImage',
  CCEINFO_BY_METAINFO = '/v1/upgrade/form/cceInfo',
}

// 获取所有可供租户使用的应用列表
export const getAppForTenants = () => {
  // 获取所有可供租户使用的应用列表
  return upgradeHttp.get<AppItem[]>({ url: Api.APP_FOR_TENANTS });
};

// 获取所有非内置租户列表
export const getTenantList = () => {
  // 获取所有非内置租户列表
  return upgradeHttp.get<TenantItem[]>({ url: Api.ALL_TENANT_LIST });
};

// 根据所选应用，获取该应用下的所有租户
export const getTenantListByApp = (params: AppDto) => {
  // 获取应用ID
  return upgradeHttp.get<TenantItem[]>({ url: Api.TENANT_LIST_BY_APP, params });
};

// 根据所选应用 + 所选租户，获取租户购买本应用的套餐类型
export const getInstanceListByAppTenant = (params: AppTenantDto) => {
  return upgradeHttp.get<InstanceItem[]>({
    url: Api.INSTANCE_LIST_BY_APP_TENANT,
    params,
  });
};

// 根据所选应用，获取有多个镜像版本的组件（仅返回有多个镜像版本的）
export const getComponentListByApp = (params: AppDto) => {
  return upgradeHttp.get<ComponentItem[]>({
    url: Api.COMPONENT_LIST_BY_APP,
    params,
  });
};

// 根据所选应用 + 租户 + 套餐 + 组件，获取工作负载相关信息
export const getCceInfoByMetaInfo = (params: DeployInfoQueryParams) => {
  return upgradeHttp.get<CceInfo>({ url: Api.CCEINFO_BY_METAINFO, params });
};

// 根据所选应用 + 组件，获取可用镜像版本
export const getImageListByComp = (params: AppCompParams) => {
  return upgradeHttp.get<ImageItem[]>({
    url: Api.IMAGE_LIST_BY_COMPONENT,
    params,
  });
};

// 请求参数：根据组件ID + 版本，获取镜像信息
export const getImageByCompIdAndVersion = (params: CompParams) => {
  return upgradeHttp.get<ImageItem>({
    url: Api.IMAGE_BY_COMP_ID_VERSION,
    params,
  });
};
